#!/bin/ksh


(
cat << E
"name","product_id","status"
string,string,integer
E

e=0
while (( e < 40 )); do
  print "clos$e,M3-E128",1
  let e+=1
done

e=0
while (( e < 20 )); do
  print "spine$e,M3-E128",1
  let e+=1
done


) > enclosures.csv


# hosts
(
cat << E
hostname,sw_version,status
string,string,integer
E

i=0
while ((i < 2560)); do
  printf "host%04d,GM,1\n" $i
  let i+=1
done

) > hosts.csv

#linecards
(
cat << E
enclosure_name,enclosure_slot,product_id,serial_no,status
string,integer,string,string,integer
E

e=0
while (( e < 40 )); do
  s=0
  while (( s < 8 )); do
    let sl=s+1
    print "clos$e,${sl},M3-SPINE-8F,${RANDOM},1"
    let s+=1
  done
  while (( s < 16 )); do
    let sl=s+1
    print "clos$e,${sl},M3-SW16-8F,${RANDOM},1"
    let s+=1
  done
  let e+=1
done

e=0
while (( e < 20 )); do
  s=0
  while (( s < 16 )); do
    let sl=s+1
    print "spine$e,${sl},M3-SW16-8F,${RANDOM},1"
    let s+=1
  done
  let e+=1
done

) > linecards.csv

# NICs
(
cat << E
hostname,host_nic_id,mac_addr,serial_no,product_id,status
string,integer,MAC,string,string,integer
E

i=0
while ((i < 2560)); do
  a=$(expr $RANDOM % 99)
  b=$(expr $RANDOM % 99)
  c=$(expr $RANDOM % 99)
  printf "host%04d,0,00:59:dd:%02d:%02d:%02d,${RANDOM},M3F-PCIXD-2,1\n" $i $a $b $c
  let i+=1
done

) > nics.csv

# links
(
cat << E
name_1,slot_1,port_1,subport_1,name_2,slot_2,port_2,subport_2,status
string,integer,integer,integer,string,integer,integer,integer,integer
E

e=0
s=8
p=0
h=0
while (( h < 2560 )); do

  # account for label offsets
  let pl=p+8
  let sl=s+1

  printf "host%04d,0,0,0,clos$e,${sl},${pl},0,1\n" $h

  let h+=1
  let p+=1
  if (( p >= 8 )); then
    p=0
    let s+=1
    if (( s >= 16 )); then
      s=8
      let e+=1
    fi
  fi
done

ce=0
cs=0
cp=0
se=0

while (( se < 20 )); do
  ss=0
  while (( ss < 16 )); do
    sp=0
    while (( sp < 8 )); do

      # account for label offsets
      let csl=cs+1
      let ssl=ss+1
      let spl=sp+8
      print "clos${ce},${csl},${cp},0,spine${se},${ssl},${spl},0,1"

      let ce+=1
      if (( ce >= 40 )); then
	let sl=s+1
        ce=0
	let cp+=1
	if (( cp >= 8 )); then
	  cp=0
	  let cs+=1
	fi
      fi

      let sp+=1
    done
    let ss+=1
  done
  let se+=1
done

) > links.csv
